package com.gitee.W_Jun;

import java.util.Date;

/**
 * @author https://gitee.com/W_Jun
 * @date 2021-12-23 21:28
 * @Description 如果当前帧是由构造方法或者实例方法创建的，
 *              那么该对象引用this将会存放在index为0的slot处，
 *              其余的参数按照参数表顺序继续排列。
 *              编译后用jclasslib查看
 */
public class LocalVariablesTest2 {
    private int count = 0;

    public static void main(String[] args) {
        LocalVariablesTest2 test = new LocalVariablesTest2();
        int num = 10;
        test.test1();
    }

    public static void testStatic() {
        LocalVariablesTest2 test = new LocalVariablesTest2();
        Date date = new Date();
        int count = 10;
        System.out.println(count);
        //因为this变量不存在于当前方法的局部变量表中
        //System.out.println(this.count);//错误
    }

    //关于slot的使用的理解
    public LocalVariablesTest2() {
        this.count = 1;
    }

    public void test1() {
        Date date = new Date();
        String name1 = "java";
        String info = test2(date, name1);
        //如果不用info变量保存，而是直接调用（调用后没有变量接收），在局部变量表中就没有info
        //test2(date, name1);
        System.out.println(date + name1);
    }

    public String test2(Date dateP, String name2) {
        dateP = null;
        name2 = "zhangsan";
        double weight = 130.5;//占据两个slot
        char gender = '男';
        return dateP + name2;
    }

    public void test3() {
        count++;
    }

    //栈帧中的局部变量表中的槽位是可以重用的
    public void test4() {
        int a = 0;
        {
            int b = 0;
            b = a + 1;
        }
        //变量c使用之前已经销毁的变量b占据的slot的位置
        int c = a + 1;
    }

}
